package com.domus.dreamMenu.comunicacao;

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.util.ArrayList;

import com.domus.dreamMenu.resource.Resources;
import com.domus.dreamMenu.tipos.Cardapio;
import com.domus.dreamMenu.tipos.FonteNoticias;
import com.domus.dreamMenu.tipos.Idioma;
import com.domus.dreamMenu.tipos.Pedido;
import com.domus.dreamMenu.tipos.Prato;


public class ChamadaDeMetodosRemotos {
/*
 * Essa classe contem chamadas (com assinatura
 * definida na interface) ao objeto remoto, nao possui implementacao nenhuma
 * desses metodos
 */	
	static InterfaceRemotaDoServidorCliente interfaceRemotaDoServidor;
	
	
	
	//esse metodo busca o objeto remoto caso nao exista ainda
	
	public static void iniciarServidor(){ 
		if(interfaceRemotaDoServidor==null){
			try {
				interfaceRemotaDoServidor = (InterfaceRemotaDoServidorCliente)
				Naming.lookup("rmi://"+Resources.enderecoIpDoServidor+":"+Resources.portaUsadaEmRMI+"/Servidor");
			} catch (MalformedURLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (RemoteException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (NotBoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		
	}
	
	
	public static Cardapio getCardapio(){
		iniciarServidor();
		Cardapio cardapio = null;
		try {
			cardapio = interfaceRemotaDoServidor.getCardapio();
		}catch(Exception e){
			e.printStackTrace();
			
		}
		return cardapio;
	}
	
	public Prato getPrato(int codigo){
		iniciarServidor();
		Prato prato = null;
		try {
			prato = interfaceRemotaDoServidor.getPrato(codigo);
			}catch(Exception e){
				e.printStackTrace();
				
			}
		return prato;
		
	}
	
	public void inserirPedido(Pedido pedido, int mesa){
		iniciarServidor();
		try{
			interfaceRemotaDoServidor.fazerPedido(pedido,mesa);
		}catch(Exception e){
			e.printStackTrace();
		}
		
		
	}
	
	public ArrayList<FonteNoticias> getFontesNoticias(){
		try{
			return interfaceRemotaDoServidor.getFontesNoticias();
		}catch(Exception e){
			e.printStackTrace();
		}
		return null;
	}
	
	public void registrarObserverPratoeSecao(String ip){
		iniciarServidor();
		try{
			interfaceRemotaDoServidor.registrarObserverPratoeSecao(ip);
		}catch(Exception e){
			e.printStackTrace();
		}
		
	}
	
	public static void fecharConta(int mesa){
		iniciarServidor();
		try {
			interfaceRemotaDoServidor.fecharConta(mesa);
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}
